// 小程序入口文件
const envConfig = require('./config/env.js');

// 注释掉bundle导入，使用多入口构建方式
// try {
//   require('./dist/bundle.js');
// } catch (e) {
//   console.error('加载bundle.js失败', e);
//   // 失败时继续使用原始模块
// }

App({
  onLaunch() {
    console.log('小程序启动');
    
    // 初始化环境配置（必须最先执行）
    this.initEnvironment();
    
    // 初始化全局数据
    this.initGlobalData();
    
    // 使用推荐的新API获取系统信息
    try {
      // 替换已弃用的 getSystemInfoSync 为推荐的API
      const systemInfo = {
        ...wx.getAppBaseInfo(),
        ...wx.getDeviceInfo(),
        ...wx.getWindowInfo()
      };
      this.globalData.systemInfo = systemInfo;
    } catch (err) {
      console.error('获取系统信息失败:', err);
    }
    
    // 尝试获取本地存储的用户信息
    const userInfo = wx.getStorageSync('userInfo');
    if (userInfo) {
      this.globalData.userInfo = userInfo;
    }
    
    // 检查更新
    this.checkForUpdates();
    
    // 捕获全局未处理的Promise错误
    wx.onUnhandledRejection(({ reason }) => {
      console.error('未处理的Promise错误:', reason);
    });
  },
  
  // 应用自定义配置
  applyCustomConfig(customConfig) {
    // 更新全局数据中的API地址
    this.globalData.serverUrl = customConfig.serverUrl;
    this.globalData.baseUrl = customConfig.baseUrl;
    this.globalData.debug = customConfig.debug;
    
    // 保存自定义配置到本地存储，以便重启后能继续使用
    try {
      wx.setStorageSync('NONGHI_CUSTOM_CONFIG', customConfig);
    } catch (e) {
      console.error('保存自定义配置失败:', e);
    }
    
    console.log('已应用自定义配置:', customConfig);
  },
  
  // 加载自定义配置（如果有）
  loadCustomConfig() {
    try {
      const customConfig = wx.getStorageSync('NONGHI_CUSTOM_CONFIG');
      if (customConfig) {
        console.log('从本地存储加载自定义配置');
        this.applyCustomConfig(customConfig);
        return true;
      }
    } catch (e) {
      console.error('加载自定义配置失败:', e);
    }
    return false;
  },
  
  // 环境初始化单独提取为方法
  initEnvironment() {
    // 初始化环境配置
    envConfig.initEnv();
    console.log(`当前运行环境: ${envConfig.currentEnv}`);
    
    // 尝试加载自定义配置，如果加载成功则不再使用环境配置
    if (!this.loadCustomConfig()) {
      // 没有自定义配置，使用环境配置
      const config = envConfig.getConfig();
      console.log(`服务器地址: ${config.serverUrl}`);
      console.log(`API基础地址: ${config.baseUrl}`);
      console.log(`调试模式: ${config.debug ? '开启' : '关闭'}`);
    }
  },
  
  onError(error) {
    // 处理全局错误
    console.error('应用错误:', error);
    
    // 可以在这里添加错误上报逻辑
  },
  
  initGlobalData() {
    // 从环境配置获取服务器地址
    const config = envConfig.getConfig();
    
    this.globalData = {
      userInfo: null,
      hasUserInfo: false,
      canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl'),
      // 从环境配置获取服务器地址
      serverUrl: config.serverUrl,
      baseUrl: config.baseUrl,
      // 环境配置信息
      env: envConfig.currentEnv,
      debug: config.debug,
      // 确保所有使用到的对象都被初始化，避免"Cannot read property 'D' of undefined"错误
      tempData: {},
      plantData: {
        currentPlant: null,
        recognitionResult: null
      },
      userRegion: '中国'  // 默认地区
    };
  },
  
  checkForUpdates() {
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager();
      updateManager.onCheckForUpdate((res) => {
        if (res.hasUpdate) {
          updateManager.onUpdateReady(() => {
            wx.showModal({
              title: '更新提示',
              content: '新版本已准备好，是否重启应用？',
              success: (res) => {
                if (res.confirm) {
                  updateManager.applyUpdate();
                }
              }
            });
          });
        }
      });
    }
  },
  
  globalData: {} // 这会被initGlobalData覆盖
});
